25#include <Eigen/SparseCore>
26#include <Eigen/SparseQR>
27#include <Eigen/SparseCholesky>
28#include <Eigen/OrderingMethods>
76 Eigen::SparseMatrix<double>
A_;
83 Eigen::SparseQR<Eigen::SparseMatrix<double>, Eigen::NaturalOrdering<int>>
qr_;
84 Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>>
ldlt_;
87 Eigen::SparseMatrix<double>
R_,
Rt_;
88 Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, int>
R_perm_;
112 SolverEigen(
const ProblemPtr& _wolf_problem,
const YAML::Node& _params);
122 bool failed()
const override;
140 const Eigen::SparseMatrix<double>&
getJacobian()
const;
166 const LocalParametrizationBasePtr& local_param)
const override;
170 bool checkDerived(std::string prefix =
"")
const override;
Gauss-Newton solver using sparse linear solvers through Eigen (no ceres dependency)
Definition: solver_eigen.h:58
unsigned int n_rows_
Definition: solver_eigen.h:73
SolverEigen(const ProblemPtr &_wolf_problem, const YAML::Node &_params)
Definition: solver_eigen.cpp:92
void reindex()
Recomputes the column of each non-fixed state block and the row of each factor (if structure changed)
Definition: solver_eigen.cpp:365
unsigned int max_num_iterations_
Definition: solver_eigen.h:91
bool hasLocalParametrizationDerived(const StateBlockPtr &st) const override
Definition: solver_eigen.cpp:1025
bool converged_
Definition: solver_eigen.h:99
unsigned int line_search_steps_
step halvings of the backtracking line search
Definition: solver_eigen.h:102
std::map< FactorBasePtr, unsigned int > fac_2_row_
first row of each factor
Definition: solver_eigen.h:69
double linear_solver_time_
Definition: solver_eigen.h:105
std::string getLinearSolverName() const
Linear solver and its implementation, e.g. "cholesky (CHOLMOD)" or "qr (Eigen SparseQR)".
Definition: solver_eigen.cpp:1264
std::string termination_message_
Definition: solver_eigen.h:100
std::set< StateBlockPtr > fixed_state_blocks_
registered fixed state blocks
Definition: solver_eigen.h:71
unsigned int n_failed_
Definition: solver_eigen.h:109
double parameter_tolerance_
Definition: solver_eigen.h:92
bool linearize(bool _apply_loss)
Definition: solver_eigen.cpp:445
Eigen::SparseMatrix< double > A_
stacked jacobian (weighted by the loss function if applicable)
Definition: solver_eigen.h:76
WOLF_SOLVER_CREATE(SolverEigen)
void printProfilingDerived(std::ostream &_stream) const override
Definition: solver_eigen.cpp:1092
unsigned int n_no_convergence_
Definition: solver_eigen.h:109
unsigned int n_cols_
Definition: solver_eigen.h:73
unsigned int successful_steps_
Definition: solver_eigen.h:101
Eigen::PermutationMatrix< Eigen::Dynamic, Eigen::Dynamic, int > R_perm_
column permutation of the QR
Definition: solver_eigen.h:88
const Eigen::SparseMatrix< double > & getJacobian() const
Stacked jacobian of the last linearization (with loss function weights)
Definition: solver_eigen.h:200
double initialCost() const override
Definition: solver_eigen.cpp:1077
unsigned int min_num_iterations_
iterations during which the solver cannot be interrupted
Definition: solver_eigen.h:94
bool stopped_
Definition: solver_eigen.h:99
Eigen::VectorXd b_
stacked residuals (weighted by the loss function if applicable)
Definition: solver_eigen.h:77
void addStateBlockDerived(const StateBlockPtr &state_ptr) override
Definition: solver_eigen.cpp:961
void applyIncrement(const Eigen::VectorXd &_dx)
Applies an increment (in the tangent space) to the non-fixed state blocks.
Definition: solver_eigen.cpp:585
bool isStateBlockFixedDerived(const StateBlockPtr &st) const override
Definition: solver_eigen.cpp:1014
bool isStateBlockRegisteredDerived(const StateBlockPtr &state_ptr) const override
Definition: solver_eigen.cpp:1009
unsigned int n_linear_solves_
Definition: solver_eigen.h:103
LinearSolverType getLinearSolverType() const
Definition: solver_eigen.h:195
std::string briefReport() const
One line report of the last solve (as ceres::Solver::Summary::BriefReport())
Definition: solver_eigen.cpp:1182
unsigned int n_convergence_
Definition: solver_eigen.h:109
LinearSolverType linear_solver_
Definition: solver_eigen.h:81
double cost_
Definition: solver_eigen.h:78
int sizeStateBlocksEstimatedDerived() const override
Definition: solver_eigen.cpp:1040
Eigen::SparseMatrix< double > Rt_
(sorted) R factor of the QR and its transpose, used for covariances
Definition: solver_eigen.h:87
bool computeCovarianceBlocks(const std::vector< std::pair< StateBlockPtr, StateBlockPtr > > &_pairs)
Computes and stores in the problem the covariance blocks of the given pairs of state blocks.
Definition: solver_eigen.cpp:863
unsigned int n_linearizations_
Definition: solver_eigen.h:103
std::string terminationType() const
Definition: solver_eigen.cpp:1174
unsigned int iterations() const override
Definition: solver_eigen.cpp:1072
bool failed() const override
Definition: solver_eigen.cpp:1062
void updateStateBlockStatusDerived(const StateBlockPtr &state_ptr) override
Definition: solver_eigen.cpp:982
Eigen::SparseQR< Eigen::SparseMatrix< double >, Eigen::NaturalOrdering< int > > qr_
columns ordered in reindex()
Definition: solver_eigen.h:83
std::unique_ptr< SuiteSparseSolvers > suitesparse_
SPQR and CHOLMOD (defined only if SuiteSparse was found)
Definition: solver_eigen.h:86
double function_tolerance_
Definition: solver_eigen.h:92
double minimizer_time_
Definition: solver_eigen.h:104
std::map< StateBlockPtr, LocalParametrizationBasePtr > sb_2_local_param_
local param of each state block
Definition: solver_eigen.h:70
unsigned int n_iter_max_
Definition: solver_eigen.h:108
LinearSolverType
Definition: solver_eigen.h:61
double gradient_tolerance_
Definition: solver_eigen.h:92
int numStateBlocksEstimatedDerived() const override
Definition: solver_eigen.cpp:1030
void updateStateBlockLocalParametrizationDerived(const StateBlockPtr &state_ptr) override
Definition: solver_eigen.cpp:994
bool hasThisLocalParametrizationDerived(const StateBlockPtr &st, const LocalParametrizationBasePtr &local_param) const override
Definition: solver_eigen.cpp:1019
bool failed_
Definition: solver_eigen.h:99
Eigen::MatrixXd solveNormalEquations(const Eigen::MatrixXd &_E) const
Solves (AᵀA)·X = E using the last factorization.
Definition: solver_eigen.cpp:569
bool converged() const override
Definition: solver_eigen.cpp:1057
double total_time_
Definition: solver_eigen.h:98
void removeFactorDerived(const FactorBasePtr &fac_ptr) override
Definition: solver_eigen.cpp:953
std::string solveDerived(const ReportVerbosity report_level) override
Definition: solver_eigen.cpp:154
Eigen::SimplicialLDLT< Eigen::SparseMatrix< double > > ldlt_
Definition: solver_eigen.h:84
std::string fullReport() const
Full report of the last solve (as ceres::Solver::Summary::FullReport())
Definition: solver_eigen.cpp:1191
bool isFactorRegisteredDerived(const FactorBasePtr &fac_ptr) const override
Definition: solver_eigen.cpp:1004
void addFactorDerived(const FactorBasePtr &fac_ptr) override
Definition: solver_eigen.cpp:943
bool computeCovariancesDerived(const CovarianceBlocksToBeComputed _blocks) override
Definition: solver_eigen.cpp:605
bool wasStopped() const override
Definition: solver_eigen.cpp:1067
bool checkDerived(std::string prefix="") const override
Definition: solver_eigen.cpp:1105
double postprocessor_time_
Definition: solver_eigen.h:104
double linearization_time_
Definition: solver_eigen.h:105
double finalCost() const override
Definition: solver_eigen.cpp:1082
bool interrupt_on_problem_change_
interrupt the solver if the problem changed (as SolverCeres)
Definition: solver_eigen.h:93
double totalTime() const override
Definition: solver_eigen.cpp:1087
double initial_cost_
Definition: solver_eigen.h:98
unsigned int unsuccessful_steps_
accepted and rejected Gauss-Newton steps
Definition: solver_eigen.h:101
int sizeFactorsDerived() const override
Definition: solver_eigen.cpp:1048
unsigned int iterations_
Definition: solver_eigen.h:97
double preprocessor_time_
Definition: solver_eigen.h:104
Eigen::VectorXd solveIncrement() const
Solves A_·dx = -b_ using the last factorization.
Definition: solver_eigen.cpp:552
std::map< StateBlockPtr, unsigned int > sb_2_col_
first column of each non-fixed state block
Definition: solver_eigen.h:68
bool factorize()
Factorizes A_ with the selected linear solver. Returns false if it failed or A_ is rank deficient.
Definition: solver_eigen.cpp:518
double final_cost_
Definition: solver_eigen.h:98
unsigned int n_iter_acc_
Definition: solver_eigen.h:108
bool analysis_dirty_
the structure changed: symbolic analysis of the factorization needed
Definition: solver_eigen.h:82
Eigen::SparseMatrix< double > R_
Definition: solver_eigen.h:87
int numFactorsDerived() const override
Definition: solver_eigen.cpp:1035
bool structure_dirty_
Definition: solver_eigen.h:72
void removeStateBlockDerived(const StateBlockPtr &state_ptr) override
Definition: solver_eigen.cpp:971
~SolverEigen() override
Definition: solver_eigen.cpp:146
unsigned int n_interrupted_
Definition: solver_eigen.h:109
Solver manager for WOLF.
Definition: solver_manager.h:84
CovarianceBlocksToBeComputed
Enumeration of covariance blocks to be computed.
Definition: solver_manager.h:89
ReportVerbosity
Enumeration for the verbosity of the solver report.
Definition: solver_manager.h:102
Definition: capture_base.h:23
WOLF_PTR_TYPEDEFS(CaptureLandmarksExternal)
Definition: solver_eigen.cpp:60